{"componentChunkName":"component---src-templates-blog-page-index-tsx","path":"/token-erc721/","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"BlogPage\",\n  \"title\": \"Criando nosso primeiro Token ERC721\",\n  \"description\": \"Nesse artigo iremos aprender a como criar nosso primeiro Token ERC721 e uma aplicação que irá interagir com nosso token.\",\n  \"image\": \"capa.jpg\",\n  \"tags\": [\"Intermediário\", \"Avançado\", \"Aplicações\"],\n  \"author\": [\"Matheus\"],\n  \"publishedAt\": \"05/06/2022\",\n  \"modifiedAt\": \"20220605\",\n  \"suburl\": \"token-erc721/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Nesse artigo iremos aprender a criar nosso primeiro Token ERC721 e uma aplica\\xE7\\xE3o que ir\\xE1 interagir com nosso token.\"), mdx(\"h2\", {\n    \"id\": \"token-erc721\"\n  }, \"Token ERC721\"), mdx(\"p\", null, \"Qualquer contrato que siga o \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://eips.ethereum.org/EIPS/eip-721\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"padr\\xE3o ERC721\"), \" \\xE9 considerado um token ERC721.\"), mdx(\"p\", null, \"Os tokens \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC721\"), \" fornecem funcionalidades para\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"transferir tokens\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"permitir que outros transfiram tokens em nome do titular do token\")), mdx(\"p\", null, \"Um exemplo de interface para o token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC721\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ninterface IERC165 {\\n    function supportsInterface(bytes4 interfaceID) external view returns (bool);\\n}\\n\\ninterface IERC721 is IERC165 {\\n    function balanceOf(address owner) external view returns (uint balance);\\n\\n    function ownerOf(uint tokenId) external view returns (address owner);\\n\\n    function safeTransferFrom(\\n        address from,\\n        address to,\\n        uint tokenId\\n    ) external;\\n\\n    function safeTransferFrom(\\n        address from,\\n        address to,\\n        uint tokenId,\\n        bytes calldata data\\n    ) external;\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint tokenId\\n    ) external;\\n\\n    function approve(address to, uint tokenId) external;\\n\\n    function getApproved(uint tokenId) external view returns (address operator);\\n\\n    function setApprovalForAll(address operator, bool _approved) external;\\n\\n    function isApprovedForAll(address owner, address operator)\\n        external\\n        view\\n        returns (bool);\\n}\\n\\ninterface IERC721Receiver {\\n    function onERC721Received(\\n        address operator,\\n        address from,\\n        uint tokenId,\\n        bytes calldata data\\n    ) external returns (bytes4);\\n}\\n\\ncontract ERC721 is IERC721 {\\n    event Transfer(address indexed from, address indexed to, uint indexed id);\\n    event Approval(address indexed owner, address indexed spender, uint indexed id);\\n    event ApprovalForAll(\\n        address indexed owner,\\n        address indexed operator,\\n        bool approved\\n    );\\n\\n    // Mapping from token ID to owner address\\n    mapping(uint => address) internal _ownerOf;\\n\\n    // Mapping owner address to token count\\n    mapping(address => uint) internal _balanceOf;\\n\\n    // Mapping from token ID to approved address\\n    mapping(uint => address) internal _approvals;\\n\\n    // Mapping from owner to operator approvals\\n    mapping(address => mapping(address => bool)) public isApprovedForAll;\\n\\n    function supportsInterface(bytes4 interfaceId) external pure returns (bool) {\\n        return\\n            interfaceId == type(IERC721).interfaceId ||\\n            interfaceId == type(IERC165).interfaceId;\\n    }\\n\\n    function ownerOf(uint id) external view returns (address owner) {\\n        owner = _ownerOf[id];\\n        require(owner != address(0), \\\"token n\\xE3o existe\\\");\\n    }\\n\\n    function balanceOf(address owner) external view returns (uint) {\\n        require(owner != address(0), \\\"owner = endere\\xE7o 0\\\");\\n        return _balanceOf[owner];\\n    }\\n\\n    function setApprovalForAll(address operator, bool approved) external {\\n        isApprovedForAll[msg.sender][operator] = approved;\\n        emit ApprovalForAll(msg.sender, operator, approved);\\n    }\\n\\n    function approve(address spender, uint id) external {\\n        address owner = _ownerOf[id];\\n        require(\\n            msg.sender == owner || isApprovedForAll[owner][msg.sender],\\n            \\\"n\\xE3o autorizado\\\"\\n        );\\n\\n        _approvals[id] = spender;\\n\\n        emit Approval(owner, spender, id);\\n    }\\n\\n    function getApproved(uint id) external view returns (address) {\\n        require(_ownerOf[id] != address(0), \\\"token n\\xE3o existe\\\");\\n        return _approvals[id];\\n    }\\n\\n    function _isApprovedOrOwner(\\n        address owner,\\n        address spender,\\n        uint id\\n    ) internal view returns (bool) {\\n        return (spender == owner ||\\n            isApprovedForAll[owner][spender] ||\\n            spender == _approvals[id]);\\n    }\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint id\\n    ) public {\\n        require(from == _ownerOf[id], \\\"from != owner\\\");\\n        require(to != address(0), \\\"transfer\\xEAncia para endere\\xE7o 0\\\");\\n\\n        require(_isApprovedOrOwner(from, msg.sender, id), \\\"n\\xE3o autorizado\\\");\\n\\n        _balanceOf[from]--;\\n        _balanceOf[to]++;\\n        _ownerOf[id] = to;\\n\\n        delete _approvals[id];\\n\\n        emit Transfer(from, to, id);\\n    }\\n\\n    function safeTransferFrom(\\n        address from,\\n        address to,\\n        uint id\\n    ) external {\\n        transferFrom(from, to, id);\\n\\n        require(\\n            to.code.length == 0 ||\\n                IERC721Receiver(to).onERC721Received(msg.sender, from, id, \\\"\\\") ==\\n                IERC721Receiver.onERC721Received.selector,\\n            \\\"destinat\\xE1rio inseguro\\\"\\n        );\\n    }\\n\\n    function safeTransferFrom(\\n        address from,\\n        address to,\\n        uint id,\\n        bytes calldata data\\n    ) external {\\n        transferFrom(from, to, id);\\n\\n        require(\\n            to.code.length == 0 ||\\n                IERC721Receiver(to).onERC721Received(msg.sender, from, id, data) ==\\n                IERC721Receiver.onERC721Received.selector,\\n            \\\"destinat\\xE1rio inseguro\\\"\\n        );\\n    }\\n\\n    function _mint(address to, uint id) internal {\\n        require(to != address(0), \\\"mint para endere\\xE7o 0\\\");\\n        require(_ownerOf[id] == address(0), \\\"j\\xE1 cunhado\\\");\\n\\n        _balanceOf[to]++;\\n        _ownerOf[id] = to;\\n\\n        emit Transfer(address(0), to, id);\\n    }\\n\\n    function _burn(uint id) internal {\\n        address owner = _ownerOf[id];\\n        require(owner != address(0), \\\"n\\xE3o cunhado\\\");\\n\\n        _balanceOf[owner] -= 1;\\n\\n        delete _ownerOf[id];\\n        delete _approvals[id];\\n\\n        emit Transfer(owner, address(0), id);\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"criando-seu-próprio-token-erc721\"\n  }, \"Criando seu pr\\xF3prio token ERC721\"), mdx(\"p\", null, \"Para facilitar e padronizar a cria\\xE7\\xE3o de tokens \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC721\"), \", voc\\xEA pode utilizar a ferramenta \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://wizard.openzeppelin.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"OpenZeppelin\"), \",\\nreposit\\xF3rio do \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/OpenZeppelin/openzeppelin-contracts\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"OpenZeppelin no GitHub\"), \" com v\\xE1rios exemplos de contratos \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC721\"), \" e \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC20\"), \".\\nVoc\\xEA pode ler a documenta\\xE7\\xE3o completa sobre tokens \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC721\"), \" \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.openzeppelin.com/contracts/4.x/erc721\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"aqui\"), \". \"), mdx(\"p\", null, \"Atrav\\xE9s do OpenZeppelin, voc\\xEA cria seu token de forma automatizada passando apenas alguns par\\xE2metros como\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"name\"), \" - nome do token\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"symbol\"), \" - s\\xEDmbolo do seu token\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"base uri\"), \" - url base onde seus arquivos IPFS ser\\xE3o armazenados\")), mdx(\"p\", null, \"Entre outras op\\xE7\\xF5es, acesse o site da OpenZeppelin e confira a ferramenta completa.\"), mdx(\"p\", null, \"Abaixo, um simples exemplo de token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC721\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\nimport \\\"./IERC721.sol\\\";\\n\\ncontract MyNFT is ERC721 {\\n\\n    constructor() ERC721(\\\"Token PRATICA\\\", \\\"PRATICA\\\") {}\\n\\n    // Substitua base_uri pela url base de onde os dados\\n    // do seu token ERC721 ser\\xE3o armazenados.\\n    // Geralmente \\xE9 utilizando o site do IPFS: https://ipfs.io/\\n    function _baseURI() internal pure override returns (string memory) {\\n        return \\\"base_uri\\\";\\n    }\\n\\n    function mint(address to, uint id) external {\\n        _mint(to, id);\\n    }\\n\\n    function burn(uint id) external {\\n        require(msg.sender == _ownerOf[id], \\\"n\\xE3o \\xE9 o propriet\\xE1rio\\\");\\n        _burn(id);\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"p\", null, \"O token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC721\"), \" \\xE9 muito utilizando em jogos NFT estilo \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://sunflower-land.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"SunFlower Land\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://axieinfinity.com\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Axie Infinity\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://era7.io/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Era7\"), \",\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://bombcrypto.io\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"BombCrypto\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://mineraland.io\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"MineraLand\"), \", Monopolio, \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.lightnite.io/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Light Nite\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://thecryptoyou.io\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"The Crypto You\"), \",\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://deepspace.game\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"DeepSpace\"), \" entre diversos outros jogos NFT.\"), mdx(\"p\", null, \"Tamb\\xE9m \\xE9 muito utilizado na cria\\xE7\\xE3o de cole\\xE7\\xF5es NFT, gerando uma lista de tokens numerados dentro do contrato, fazendo com que assim cada token gerado identificado como\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"token original atrav\\xE9s do contrato que o crio, podendo tamb\\xE9m ser transferido para outro endere\\xE7o de carteira atrav\\xE9s das fun\\xE7\\xF5es do contrato, Dapp's e Marketplaces. \"), mdx(\"p\", null, \"Alguns dos Marketplaces dispon\\xEDveis no mercado hoje s\\xE3o: \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://opensea.io/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"OpenSea\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.binance.com/pt-BR/activity/referral/offers/claim?ref=CPA_00TB8HJZH1\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Binance Marketplace\"), \",\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.coinbase.com/pt\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Coinbase\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://mintable.app/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Mintable\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://enjin.io/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Enjin\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://rarible.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Rarible\"), \",\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://niftygateway.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Nifty Gateway\"), \", \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://crypto.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Crypto\"), \".\"), mdx(\"br\", null), mdx(\"h3\", {\n    \"id\": \"testar-no-remix\"\n  }, \"Testar no \", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"https://remix.ethereum.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Remix\")), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Criando nosso primeiro Token ERC721","description":"Nesse artigo iremos aprender a como criar nosso primeiro Token ERC721 e uma aplicação que irá interagir com nosso token.","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAgP/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAFxjYJLB//EABoQAAICAwAAAAAAAAAAAAAAAAECERIEECH/2gAIAQEAAQUCUxkOXCrNaie6/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHBAAAQUAAwAAAAAAAAAAAAAAAQACETFRAxAS/9oACAEBAAY/AiDyEudMDES2XHEJteheq+v/xAAcEAADAAEFAAAAAAAAAAAAAAAAAREhEDFBYdH/2gAIAQEAAT8hpSEOyEGBwxRmYsjKHahLqEq86f/aAAwDAQACAAMAAAAQkM//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAdEAEBAAIBBQAAAAAAAAAAAAABEQBhIRBBgZHR/9oACAEBAAE/EBq+BpzgTs/N4mQtJr2xiDBSUfHGXh5EFU25GsGidP/Z","aspectRatio":1.5151515151515151,"src":"/static/7c0611785aba711814983f21b70c002f/0cb3d/capa.jpg","srcSet":"/static/7c0611785aba711814983f21b70c002f/f836f/capa.jpg 200w,\n/static/7c0611785aba711814983f21b70c002f/2244e/capa.jpg 400w,\n/static/7c0611785aba711814983f21b70c002f/0cb3d/capa.jpg 536w","sizes":"(max-width: 536px) 100vw, 536px"}}},"tags":["Intermediário","Avançado","Aplicações"],"author":["Matheus"],"suburl":"token-erc721/","publishedAt":"05/06/2022","modifiedAt":"20220605"},"tableOfContents":{"items":[{"url":"#token-erc721","title":"Token ERC721"},{"url":"#criando-seu-próprio-token-erc721","title":"Criando seu próprio token ERC721","items":[{"url":"#testar-no-remix","title":"Testar no Remix"}]}]},"timeToRead":1},"allMdx":{"nodes":[{"frontmatter":{"suburl":"sistema-de-swap-estavel-amm/","title":"Como criar um sistema de Swap estável AMM","tags":["Avançado","DeFi"]}},{"frontmatter":{"suburl":"produto-constante-amm/","title":"Como criar um produto constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"soma-constante-amm/","title":"Como criar uma soma constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-cofre/","title":"Como criar um sistema de Cofre","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-staking/","title":"Como criar um sistema de Staking de Recompensas","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-preco-chainlink-oracle/","title":"Como criar um sistema de preços Oracle","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"exemplos-de-uso-do-uniswap-v3/","title":"Exemplos de uso do Uniswap V3","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"fornecimento-unilateral-com-uniswap-v2/","title":"Fornecimento unilateral ideal com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"adicionar-e-remover-liquidez-com-uniswap-v2/","title":"Como adicionar e remover liquidez com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"swap-com-uniswap-v2/","title":"Como realizar Swap com Uniswap V2","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"testes-com-echidna/","title":"Como realizar testes com Echidna","tags":["Intermediário"]}},{"frontmatter":{"suburl":"ignorar-verificacao-do-tamanho-do-contrato/","title":"Como ignorar a verificação do tamanho do contrato","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"repeticao-de-assinatura/","title":"Repetição de assinatura","tags":["Avançado","Hacks"]}},{"frontmatter":{"suburl":"manipular-timestamp-do-bloco/","title":"Manipulando o timestamp do bloco na blockchain","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-front-running/","title":"Ataque utilizando a técnica front running","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"honeypot/","title":"Criar uma armadilha para hackers com a técnica honeypot","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ocultar-script-malicioso/","title":"Como um contrato malicioso esconde seu script","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"phishing-com-txorigin/","title":"Phishing com tx.origin","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"negacao-de-servico/","title":"Inutilizar um contrato através da negação de serviço","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"fonte-de-aleatoriedade/","title":"Fonte de Aleatoriedade","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"chamada-de-funcao-delegatecall/","title":"Chamada de função delegatecall","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"acessando-variaveis-privadas/","title":"Acessando variáveis privadas","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"auto-destruicao/","title":"Ataques com Auto-destruição","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"estouro-de-memoria/","title":"Ataques com estouro de memória","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-de-reentrada/","title":"Ataque de reentrada, aprenda como funciona e como evitar","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"bloqueio-de-tempo-timelock/","title":"Criar um contrato com bloqueio de tempo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"contrato-para-multichamadas/","title":"Criar contrato para Multichamada de funções","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"financiamento-coletivo-crowd-fund/","title":"Criar um sistema de financiamento coletivo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"sistema-de-leilao-ingles-holandes/","title":"Criar um sistema de leilão inglês e holandês","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-bidirecional/","title":"Criar um Canal de pagamento bidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-unidirecional/","title":"Criar um Canal de pagamento unidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"gravar-dados-no-slot/","title":"Como gravar dados em qualquer slot","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"implantar-contrato-com-proxy/","title":"Como implantar qualquer contrato com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"trabalhando-com-proxy/","title":"Trabalhando com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"precomputar-endereco-contrato/","title":"Pré-computar endereço do Contrato com Create2","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc721/","title":"Criando nosso primeiro Token ERC721","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc20/","title":"Criando nosso primeiro Token ERC20","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-mapeamento-iteravel/","title":"Mapeamento Iterável","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-arvore-merkle/","title":"Árvore de Merkle","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-multi-assinatura/","title":"Carteira com Multi-Assinaturas","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-wallet/","title":"Carteira de Tokens","tags":["Iniciante","Aplicações"]}},{"frontmatter":{"suburl":"assinaturas-e-hashing-keccak/","title":"Verificando assinatura hashing com Keccak256","tags":["Intermediário","Avançado"]}},{"frontmatter":{"suburl":"abi/","title":"O que é ABI e para que serve?","tags":["Iniciante"]}},{"frontmatter":{"suburl":"import-e-libraries/","title":"Import e Libraries, para que servem?","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"criar-contrato-simples/","title":"Criar um contrato através de outro contrato","tags":["Intermediário"]}},{"frontmatter":{"suburl":"call-fallback-delegatecall/","title":"Call, Fallback, Delegatecall e chamadas de contratos","tags":["Intermediário"]}},{"frontmatter":{"suburl":"transfer-send-call/","title":"Enviar Ether com transfer, send e call","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"visibilidade-interface-pagavel/","title":"Visibilidade, Interfaces e Funções Pagáveis","tags":["Intermediário"]}},{"frontmatter":{"suburl":"evento-construtor-heranca/","title":"Evento, Construtor e Herança","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"tratamento-de-erros/","title":"Tratamento de erros de condições e exceções","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"funcoes/","title":"Funções e Modificadores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"armazenamento/","title":"Armazenamento de Dados","tags":["Intermediário"]}},{"frontmatter":{"suburl":"estruturas/","title":"Estruturas - Struct","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"enum/","title":"Enum - Enumeradores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"mapping-arrays/","title":"Mapping e Arrays","tags":["Iniciante"]}},{"frontmatter":{"suburl":"if-else-for-while/","title":"If, Else, For e While","tags":["Iniciante"]}},{"frontmatter":{"suburl":"ether-wei-gas/","title":"Ether, Wei e Taxa de Gas","tags":["Iniciante"]}},{"frontmatter":{"suburl":"variaveis/","title":"Entendendo as Variáveis","tags":["Iniciante"]}},{"frontmatter":{"suburl":"primeiro-aplicativo/","title":"Meu primeiro aplicativo","tags":["Iniciante","Aplicações"]}}]},"topicsYaml":{"topics":[{"desc":"Todos os conteúdos de nível iniciante estão disponíveis aqui","title":"Iniciante","url":"iniciante/"},{"desc":"Todos os conteúdos de nível intermediário estão disponíveis aqui","title":"Intermediário","url":"intermediario/"},{"desc":"Todos os conteúdos de nível avançado estão disponíveis aqui","title":"Avançado","url":"avancado/"},{"desc":"Todos os artigos referentes a exemplos de aplicações do Solidity, estão disponíveis aqui","title":"Aplicações","url":"aplicacoes/"},{"desc":"Todos os artigos referentes a exemplos de aplicação de hacks do Solidity, estão disponíveis aqui","title":"Hacks","url":"hacks/"},{"desc":"Todos os artigos referentes a exemplos de aplicação DeFi do Solidity, estão disponíveis aqui","title":"DeFi","url":"defi/"},{"desc":"Artigos de outras linguagens de programação, exemplos de interação entre a blockchain e aplicativos externos, estão disponíveis aqui","title":"Outros Artigos","url":"artigos/"}]}},"pageContext":{"suburl":"token-erc721/","postTopics":["Intermediário","Avançado","Aplicações"],"publishedAt":"05/06/2022","prevArticle":{"title":"Criando nosso primeiro Token ERC20","layout":"BlogPage","suburl":"token-erc20/","author":["Matheus"],"tags":["Intermediário","Avançado","Aplicações"],"publishedAt":"04/06/2022","modifiedAt":"20220604"},"nextArticle":{"title":"Pré-computar endereço do Contrato com Create2","layout":"BlogPage","suburl":"precomputar-endereco-contrato/","author":["Matheus"],"tags":["Avançado","Aplicações"],"publishedAt":"06/06/2022","modifiedAt":"20220606"}}},"staticQueryHashes":["119291576","2330562257","4065828390"]}